package cn.stylefeng.guns.modular.ctm.service.impl;

import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.stylefeng.guns.modular.ctm.entity.ResumeFile;
import cn.stylefeng.guns.modular.ctm.service.ResumeFileService;
import cn.stylefeng.guns.modular.ctm.service.UploadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Service
public class UploadServiceImpl implements UploadService {

    @Value("${file.baseImgesPath}")
    private String baseImgesPath;
    @Value("${file.baseResumeFilePath}")
    private String baseResumeFilePath;
    @Autowired
    private ResumeFileService resumeFileService;

    @Override
    public String uploadAvatar(MultipartFile file) throws IOException {
        //todo 获取userId 组装路径
        String path = baseImgesPath + "77d6d66479cb80fd1b70736a36a65912/";
        //通过将给定的路径名（dataPath）转换为抽象类路径来创建新的实例。
        File imageFolder = new File(path);
        //获取文件后缀名
        String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        //上传文件名生成规则-UUID前六位+文件后缀名
        String newFileName = IdUtil.simpleUUID().substring(0, 6) + fileSuffix;
        //从父抽象路径名和子路径名字符串创建新的File实例
        File newFile = new File(imageFolder, newFileName);
        //判断父路径是否存在，如果不存在则新建。
        if (!newFile.getParentFile().exists()) {
            newFile.getParentFile().mkdirs();
        }
        //把内存中File类对象信息写入磁盘
        file.transferTo(newFile);
        //返回文件路径
        return newFile.getName();
    }

    @Override
    public String uploadResumeFile(MultipartFile file) throws IOException {
        //todo 获取userId 组装路径
        String path = baseResumeFilePath + "77d6d66479cb80fd1b70736a36a65912/";
        //通过将给定的路径名（dataPath）转换为抽象类路径来创建新的实例。
        File resumeFile = new File(path);
        //获取文件后缀名
        String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        //上传文件名生成规则-UUID前六位+文件后缀名
        String newFileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf(".")) + "-" + DateUtil.date().toString("yyyy-MM-dd") + fileSuffix;
        //从父抽象路径名和子路径名字符串创建新的File实例
        File newFile = new File(resumeFile, newFileName);
        //判断父路径是否存在，如果不存在则新建。
        if (!newFile.getParentFile().exists()) {
            newFile.getParentFile().mkdirs();
        }
        //把内存中File类对象信息写入磁盘
        file.transferTo(newFile);
        //todo 获取在线用户信息
        String userId = "77d6d66479cb80fd1b70736a36a65912";
        ResumeFile resumefile = new ResumeFile();
        resumefile.setFileName(newFile.getName());
        resumefile.setFileSize(String.valueOf(file.getSize()));
        resumefile.setUserId(userId);
        resumefile.setUploadTime(DateUtil.date().toString());
        resumeFileService.save(resumefile);
        //返回文件路径
        return newFile.getName();
    }

    @Override
    public Resource loadResource(String imagePath) {
        // 实现加载图片资源的逻辑，这里可以是文件系统、类路径、网络等不同位置
        // 这里的示例是加载文件系统中的图片
        //todo 获取userId 组装路径
        String path = baseImgesPath + "77d6d66479cb80fd1b70736a36a65912/" + imagePath;
        return new FileSystemResource(path);
    }
}
